/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.site;

import byblos.apresentacao.configuracao.MensagemEmail;
import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.negocio.Idioma;
import byblos.negocio.acomodacao.CategoriaAcomodacao;
import byblos.negocio.cliente.ClienteUtil;
import byblos.negocio.pacote.Pacote;
import byblos.negocio.reserva.AcomodacaoOnline;
import byblos.negocio.reserva.Reserva;
import byblos.persistencia.DAO;
import javax.servlet.http.HttpServletRequest;
import org.joda.time.DateTime;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;
import org.vraptor.annotations.Parameter;

/**
 *
 * @author marano
 */
@Component
@InterceptedBy(InterceptadorIdioma.class)
public class SiteReservaEnviarComponent {

    @Out
    @Parameter(create = true)
    private Reserva reserva;
    @Parameter
    private Integer acomodacaoOnlineId;
    @Parameter
    private Integer categoriaAcomodacaoId;
    @Parameter
    private Integer pacoteId;
    @In(required = false)
    private Idioma idioma;
    @In
    private HttpServletRequest request;

    public String enviar() {
        montarReserva();
        String comentario = reserva.getComentarioCliente();
        comentario = comentario.replaceAll("\n", "");
        comentario = comentario.replaceAll("\r", "\n");
        reserva.setComentarioCliente(comentario);
        reserva.setTid(tid("1023289455"));
        request.getParameterMap().put("reserva", reserva);
        new DAO().salvar(reserva);
        salvarCliente();
        enviarEmailAdm();
        if (reserva.isConsulta()) {
            return "consulta";
        } else {
            return "visa";
        }
    }

    private void enviarEmailAdm() {
        try {
            MensagemEmail mensagem = new MensagemEmail("Nova Reserva - Site", getMensagemAdm());
            mensagem.setToAdm();
            mensagem.enviar();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private String getMensagemAdm() {
        return "<a href='http://www.byblospousada.com.br/byblos/reserva.visualizar.logic?id=" + reserva.getId() + "'>ver reserva</a>";
    }

    private String tid(String lojaVisa) {
        StringBuilder tidString = new StringBuilder();

        tidString.append(lojaVisa.substring(4, 9));

        DateTime d = new DateTime();
        System.out.println("loja visa formatado " + lojaVisa.substring(4, 9));
        System.out.println("ultimo digito ano " + ("" + d.getYearOfEra()).substring(3, 4));
        System.out.println("dia atual corrente " + preencherComZero(d.getDayOfYear(), 3));
        System.out.println("hora " + preencherComZero(d.getHourOfDay(), 2));
        System.out.println("minuto " + preencherComZero(d.getMinuteOfHour(), 2));
        System.out.println("segundo " + preencherComZero(d.getSecondOfMinute(), 2));
        System.out.println("decimo de segundo " + ("" + d.getMillisOfSecond()).substring(0, 1));
        System.out.println("tipo de transacao 1001");
        tidString.append(("" + d.getYearOfEra()).substring(3, 4));
        tidString.append(preencherComZero(d.getDayOfYear(), 3));
        tidString.append(preencherComZero(d.getHourOfDay(), 2));
        tidString.append(preencherComZero(d.getMinuteOfHour(), 2));
        tidString.append(preencherComZero(d.getSecondOfMinute(), 2));
        tidString.append(("" + d.getMillisOfSecond()).substring(0, 1));

        tidString.append("1001");
        System.out.println("============tid da locaweb: " + tidString.toString());
        return tidString.toString();
    }

    private String preencherComZero(int numero, int quantidadeAlgarismo) {
        String string = "" + numero;
        while (string.length() < quantidadeAlgarismo) {
            string = "0" + string;
        }
        return string;
    }

    private void montarReserva() {
        if (acomodacaoOnlineId != null) {
            reserva.setAcomodacaoOnline(new DAO().localizar(AcomodacaoOnline.class, acomodacaoOnlineId));
        }
        if (categoriaAcomodacaoId != null) {
            reserva.setCategoriaAcomodacao(new DAO().localizar(CategoriaAcomodacao.class, categoriaAcomodacaoId));
        }
        if (pacoteId != null) {
            reserva.setPacote(new DAO().localizar(Pacote.class, pacoteId));
        }
    }

    private void salvarCliente() {
        new ClienteUtil().adicionarCliente(reserva.getCliente(idioma));
    }
}
